/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.ufjf.pos.model.dao;

import br.ufjf.pos.model.Usuario;
import br.ufjf.pos.util.GenericDao;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

/**
 *
 * @author ice
 */
public class UsuarioDAO extends GenericDao<Usuario, Integer> {

    @Override
    public void inserir(Usuario obj) throws ClassNotFoundException, SQLException {

        String sql = "insert into usuarios (login, senha, perfil) values (?, MD5(?), ?)";

        ArrayList<String> lista = new ArrayList<String>();

        lista.add(obj.getLogin());
        lista.add(obj.getSenha());
        lista.add(obj.getPerfil());

        executaDML(sql, lista);

    }

    @Override
    public void alterar(Usuario obj) throws ClassNotFoundException, SQLException {

        String sql = "update usuarios set login = ?, perfil = ?, senha = MD5(?) where id = ?";

        ArrayList<String> lista = new ArrayList<String>();

        lista.add(obj.getLogin());
        lista.add(obj.getPerfil());
        lista.add(obj.getSenha());
        lista.add(Integer.toString(obj.getId()));

        executaDML(sql, lista);
    }

    @Override
    public void apagar(Usuario obj) throws ClassNotFoundException, SQLException {

        String sql = "delete from usuarios where id = ?";

        ArrayList<String> lista = new ArrayList<String>();

        lista.add(obj.getId() + "");

        executaDML(sql, lista);
    }

    @Override
    public Usuario pesquisarChave(Integer obj) throws ClassNotFoundException, SQLException {

        String sql = "select * from usuarios where id = ?";

        ArrayList<String> lista = new ArrayList<String>();

        lista.add(obj.toString());

        ResultSet rs = executaSql(sql, lista);

        if (rs.next()) {

            Usuario u = new Usuario(rs.getInt("id"), rs.getString("login"), rs.getString("senha"), rs.getString("perfil"));

            return u;

        } else {
            return null;
        }
    }

    public ArrayList<Usuario> pesquisarLogin(String login) throws ClassNotFoundException, SQLException {

        String sql = "select * from usuarios where login like ?";

        ArrayList<String> lista = new ArrayList<String>();

        lista.add("%"+ login + "%");
        
        ResultSet rs = executaSql(sql, lista);

        ArrayList<Usuario> listaUsuarios = new ArrayList<Usuario>();

        while (rs.next()) {

            Usuario u = new Usuario(rs.getInt("id"), rs.getString("login"), rs.getString("senha"), rs.getString("perfil"));

            listaUsuarios.add(u);
        }

        return listaUsuarios;
    }

    @Override
    public ArrayList<Usuario> buscarTodos() throws ClassNotFoundException, SQLException {

        String sql = "select * from usuarios";

        ArrayList<String> lista = new ArrayList<String>();

        ResultSet rs = executaSql(sql, lista);

        ArrayList<Usuario> listaUsuarios = new ArrayList<Usuario>();

        while (rs.next()) {

            Usuario u = new Usuario(rs.getInt("id"), rs.getString("login"), rs.getString("senha"), rs.getString("perfil"));

            listaUsuarios.add(u);
        }

        return listaUsuarios;
    }

    public Usuario validaLogin(String login, String senha) throws ClassNotFoundException, SQLException {

        String sql = "select * from usuarios where login = ? and senha = MD5(?)";

        ArrayList<String> lista = new ArrayList<String>();

        lista.add(login);
        lista.add(senha);

        ResultSet rs = executaSql(sql, lista);

        if (rs.next()) {
            Usuario u = new Usuario(rs.getString("login"), rs.getString("senha"));
            return u;
        } else {
            return null;
        }


    }
}
